package com.neusmart.tongrentang.util;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;

import com.neusmart.common.view.VerticalImageSpan;
import com.neusmart.tongrentang.R;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * emoji util
 * <p/>
 * roy
 */
public class EmojiUtil {

    private static final String REGULAR_EXPRESSION = "\\[[^\\]]+\\]";
    private static final Pattern PATTERN = Pattern.compile(REGULAR_EXPRESSION, Pattern.CASE_INSENSITIVE);

    private static Map<String, Integer> mEmojiMap;

    static {

        mEmojiMap = new HashMap<>();
        mEmojiMap.put("[置顶]", R.mipmap.ic_stick);
        mEmojiMap.put("[楼主]", R.mipmap.ic_host);
        //
        mEmojiMap.put("[微笑]", R.mipmap.smile);
        mEmojiMap.put("[撇嘴]", R.mipmap.wink);
        mEmojiMap.put("[色]", R.mipmap.lech);
        mEmojiMap.put("[发呆]", R.mipmap.daze);
        mEmojiMap.put("[得意]", R.mipmap.complacent);
        mEmojiMap.put("[流泪]", R.mipmap.crying);
        mEmojiMap.put("[害羞]", R.mipmap.blush);
        mEmojiMap.put("[闭嘴]", R.mipmap.lips_sealed);
        mEmojiMap.put("[睡]", R.mipmap.snooze);
        mEmojiMap.put("[大哭]", R.mipmap.weeping);
        mEmojiMap.put("[尴尬]", R.mipmap.embarrassed);
        mEmojiMap.put("[发怒]", R.mipmap.angry);
        mEmojiMap.put("[调皮]", R.mipmap.tongue_out);
        mEmojiMap.put("[呲牙]", R.mipmap.big_smile);
        mEmojiMap.put("[惊讶]", R.mipmap.surprised);
        mEmojiMap.put("[难过]", R.mipmap.sad_smile);
        mEmojiMap.put("[酷]", R.mipmap.cool);
        mEmojiMap.put("[冷汗]", R.mipmap.cold_sweating);
        mEmojiMap.put("[抓狂]", R.mipmap.hysteria);
        mEmojiMap.put("[吐]", R.mipmap.puke);
        mEmojiMap.put("[偷笑]", R.mipmap.snicker);
        mEmojiMap.put("[可爱]", R.mipmap.lovely);
        mEmojiMap.put("[白眼]", R.mipmap.scorm);
        mEmojiMap.put("[傲慢]", R.mipmap.haughty);
        mEmojiMap.put("[饥饿]", R.mipmap.hungry);
        mEmojiMap.put("[困]", R.mipmap.sleepy);
        mEmojiMap.put("[惊恐]", R.mipmap.terrified);
        mEmojiMap.put("[流汗]", R.mipmap.sweating);
        mEmojiMap.put("[憨笑]", R.mipmap.smirking);
        mEmojiMap.put("[大兵]", R.mipmap.soldier);
        mEmojiMap.put("[奋斗]", R.mipmap.struggle);
        mEmojiMap.put("[咒骂]", R.mipmap.curse);
        mEmojiMap.put("[疑问]", R.mipmap.query);
        mEmojiMap.put("[嘘..]", R.mipmap.whew);
        mEmojiMap.put("[晕]", R.mipmap.faint);
        mEmojiMap.put("[折磨]", R.mipmap.torment);
        mEmojiMap.put("[衰]", R.mipmap.unlucky);
        mEmojiMap.put("[骷髅]", R.mipmap.skull);
        mEmojiMap.put("[敲打]", R.mipmap.beat);
        mEmojiMap.put("[再见]", R.mipmap.bye);
        mEmojiMap.put("[擦汗]", R.mipmap.toweling);
        mEmojiMap.put("[抠鼻]", R.mipmap.dig_nose);
        mEmojiMap.put("[鼓掌]", R.mipmap.applaud);
        mEmojiMap.put("[糗大了]", R.mipmap.make_a_fool);
        mEmojiMap.put("[坏笑]", R.mipmap.evil_grin);
        mEmojiMap.put("[左哼哼]", R.mipmap.left_groan);
        mEmojiMap.put("[右哼哼]", R.mipmap.right_groan);
        mEmojiMap.put("[哈欠]", R.mipmap.yawn);
        mEmojiMap.put("[鄙视]", R.mipmap.despise);
        mEmojiMap.put("[委屈]", R.mipmap.feel_wronged);
        mEmojiMap.put("[快哭了]", R.mipmap.will_cry);
        mEmojiMap.put("[阴险]", R.mipmap.insidious);
        mEmojiMap.put("[亲亲]", R.mipmap.kiss);
        mEmojiMap.put("[吓]", R.mipmap.frighten);
        mEmojiMap.put("[可怜]", R.mipmap.pitiful);
        mEmojiMap.put("[菜刀]", R.mipmap.broadsword);
        mEmojiMap.put("[西瓜]", R.mipmap.watermelon);
        mEmojiMap.put("[啤酒]", R.mipmap.beer);
        mEmojiMap.put("[篮球]", R.mipmap.basketball);
        mEmojiMap.put("[乒乓]", R.mipmap.ping_pong);
        mEmojiMap.put("[咖啡]", R.mipmap.coffee);
        mEmojiMap.put("[饭]", R.mipmap.rice);
        mEmojiMap.put("[猪头]", R.mipmap.pig);
        mEmojiMap.put("[玫瑰]", R.mipmap.rose);
        mEmojiMap.put("[凋谢]", R.mipmap.fade);
        mEmojiMap.put("[示爱]", R.mipmap.lip);
        mEmojiMap.put("[爱心]", R.mipmap.heart);
        mEmojiMap.put("[心碎]", R.mipmap.broken_heart);
        mEmojiMap.put("[蛋糕]", R.mipmap.cake);
        mEmojiMap.put("[闪电]", R.mipmap.flashing);
        mEmojiMap.put("[炸弹]", R.mipmap.bomb);
        mEmojiMap.put("[刀]", R.mipmap.knife);
        mEmojiMap.put("[足球]", R.mipmap.football);
        mEmojiMap.put("[瓢虫]", R.mipmap.bug);
        mEmojiMap.put("[便便]", R.mipmap.shit);
        mEmojiMap.put("[月亮]", R.mipmap.moon);
        mEmojiMap.put("[太阳]", R.mipmap.sun);
        mEmojiMap.put("[礼物]", R.mipmap.gift);
        mEmojiMap.put("[拥抱]", R.mipmap.hug);
        mEmojiMap.put("[强]", R.mipmap.powerful);
        mEmojiMap.put("[弱]", R.mipmap.weak);
        mEmojiMap.put("[握手]", R.mipmap.handshake);
        mEmojiMap.put("[胜利]", R.mipmap.victory);
        mEmojiMap.put("[抱拳]", R.mipmap.hold_fist_salute);
        mEmojiMap.put("[勾引]", R.mipmap.seduce);
        mEmojiMap.put("[拳头]", R.mipmap.fist);
        mEmojiMap.put("[差劲]", R.mipmap.disappointing);
        mEmojiMap.put("[爱你]", R.mipmap.love_you);
        mEmojiMap.put("[NO]", R.mipmap.no);
        mEmojiMap.put("[OK]", R.mipmap.ok);

    }

    public static SpannableString getExpressionString(Context context, String str) {
        try {
            return dealExpression(context, str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static int emojiCount(String str) {
        int count = 0;
        Matcher matcher = PATTERN.matcher(str);
        while (matcher.find())
            count++;
        return count;
    }

    private static SpannableString dealExpression(Context context, String str) {
        SpannableString spannableString = new SpannableString(str);
        Matcher matcher = PATTERN.matcher(spannableString);
        int start = 0;
        while (matcher.find(start)) {
            String key = matcher.group();
            if (mEmojiMap.get(key) == null) {
                start = matcher.start() + key.length();
                continue;
            }
            int resId = mEmojiMap.get(key);
            if (resId != 0) {
                Drawable d = context.getResources().getDrawable(resId);
                VerticalImageSpan imageSpan = new VerticalImageSpan(context, resId);
                imageSpan.setRatio(d.getIntrinsicWidth() * 1.0 / d.getIntrinsicHeight());
                int end = matcher.start() + key.length();
                spannableString.setSpan(imageSpan, matcher.start(), end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                start = end;
            }
        }
        return spannableString;
    }

}
